home *** CD-ROM | disk | FTP | other *** search
- /* @(#)gp1cmds.h 1.27 90/08/22 SMI */
-
- /*
- * Copyright 1986-1990 by Sun Microsystems, Inc.
- */
-
- #ifndef gp1cmds_DEFINED
- #define gp1cmds_DEFINED
-
- /* GP low level command set */
-
- #define GP1_EOCL (0 << 8)
- #define GP1_USE_CONTEXT (1 << 8)
- #define GP1_PR_VEC (2 << 8)
- #define GP1_PR_ROP_NF (3 << 8)
- #define GP1_PR_ROP_FF (4 << 8)
-
- #define GP1_PR_PGON_SOL (5 << 8)
- #define GP1_SET_ZBUF (6 << 8)
- #define GP1_SET_HIDDEN_SURF (7 << 8)
- #define GP1_SET_MAT_NUM (8 << 8)
- #define GP1_MUL_POINT_FLT_2D (9 << 8)
-
- #define GP1_MUL_POINT_FLT_3D (10 << 8)
- #define GP1_XF_PGON_FLT_3D (11 << 8)
- #define GP1_XF_PGON_FLT_2D (12 << 8)
-
- #define GP1_SET_CLIP_LIST (15 << 8)
- #define GP1_SET_FB_NUM (16 << 8)
- #define GP1_SET_VWP_3D (17 << 8)
- #define GP1_SET_VWP_2D (18 << 8)
- #define GP1_SET_ROP (19 << 8)
-
- #define GP1_SET_CLIP_PLANES (20 << 8)
- #define GP1_MUL_POINT_INT_2D (21 << 8)
- #define GP1_MUL_POINT_INT_3D (22 << 8)
- #define GP1_SET_FB_PLANES (23 << 8)
- #define GP1_SET_MAT_3D (24 << 8)
-
- #define GP1_SET_MAT_OFFSET (26 << 8)
- #define GP1_SET_COLOR (28 << 8)
- #define GP1_SET_MAT_2D (29 << 8)
-
- #define GP1_XF_PGON_INT_3D (30 << 8)
- #define GP1_COPY_MAT (31 << 8)
- #define GP1_MUL_MAT_2D (32 << 8)
- #define GP1_MUL_MAT_3D (33 << 8)
- #define GP1_GET_MAT_2D (34 << 8)
-
- #define GP1_GET_MAT_3D (35 << 8)
- #define GP1_PROC_LINE_FLT_3D (36 << 8)
- #define GP1_PROC_PGON_FLT_3D (37 << 8)
- #define GP1_PROC_PGON_FLT_2D (38 << 8)
-
- #define GP2_NOP (39 << 8)
-
- #define GP1_PR_LINE (40 << 8)
- #define GP1_PR_POLYLINE (41 << 8)
- #define GP1_SET_LINE_TEX (42 << 8)
- #define GP1_SET_LINE_WIDTH (43 << 8)
- #define GP1_CGI_LINE (44 << 8)
-
- #define GP1_XF_LINE_FLT_2D (45 << 8)
- #define GP1_XF_LINE_FLT_3D (46 << 8)
- #define GP1_XF_LINE_INT_3D (47 << 8)
- #define GP1_PR_PGON_TEX (48 << 8)
-
- #define GP1_PR_ROP_TEX (50 << 8)
- #define GP1_SET_PGON_TEX_BLK (51 << 8)
- #define GP1_SET_PGON_TEX (52 << 8)
- #define GP1_SET_PGON_TEX_ORG_SCR (53 << 8)
- #define GP1_SET_PGON_TEX_ORG_XF_2D (54 << 8)
-
- #define GP1_SET_PGON_TEX_ORG_XF_3D (55 << 8)
- #define GP1_XF_LINE_INT_2D (57 << 8)
- #define GP1_XF_PGON_INT_2D (58 << 8)
- #define GP1_PROC_PGON_INT_2D (59 << 8)
-
- #define GP1_PROC_LINE_FLT_2D (60 << 8)
- #define GP1_PROC_LINE_INT_2D (61 << 8)
- #define GP1_PROC_LINE_INT_3D (62 << 8)
- #define GP1_PROC_PGON_INT_3D (63 << 8)
- #define GP1_SET_PICK_ID (64 << 8)
- #define GP1_SET_PICK_WINDOW (65 << 8)
- #define GP1_GET_PICK (66 << 8)
- #define GP1_SET_PICK (67 << 8)
- #define GP1_CLEAR_PICK (68 << 8)
-
- #define GP1_XF_POINT_INT_2D (69 << 8)
- #define GP1_XF_POINT_INT_3D (70 << 8)
- #define GP1_XF_POINT_FLT_2D (71 << 8)
- #define GP1_XF_POINT_FLT_3D (72 << 8)
-
- #define GP1_CLEAR_CONTEXT (73 << 8)
- #define GP1_SET_DEPTH_CUE (74 << 8)
- #define GP1_SET_DEPTH_CUE_COLORS (75 << 8)
- #define GP2_SET_DEPTH_CUE_PARAMETERS (76 << 8)
-
- /* number of commands defined so far */
- #define GP1_NCMDS 76
-
- /*
- * Commands that exist only on the GP2 start here.
- * True except for some minor exceptions.
- * (Leave a little gap for gp1 expansion.)
- */
-
- #define GP2_SET_RGB_COLOR (80 << 8)
- #define GP2_PROC_PGON_FLT_3D_RGB (81 << 8)
- #define GP2_PROC_PGON_INT_3D_RGB (82 << 8)
- #define GP2_XF_PGON_FLT_3D_RGB (83 << 8)
- #define GP2_XF_PGON_INT_3D_RGB (84 << 8)
- #define GP2_SET_LIGHT (85 << 8)
- #define GP2_SET_LIGHT_MATRIX (86 << 8)
- #define GP2_SET_REFLECTANCE (87 << 8)
- #define GP2_SET_EYE (88 << 8)
-
- #define GP2_SET_TRANSPARENCY (89 << 8)
- #define GP2_SET_DITHER (90 << 8)
- #define GP2_SET_LIGHT_OPTIONS (91 << 8)
-
- #define GP2_XF_SHADE_LINE_FLT_3D (99 << 8)
-
- #define GP2_XF_RECT_INT_2D (100 << 8)
- #define GP2_XF_RECT_FLT_2D (101 << 8)
- #define GP2_SET_TEXT_TYPE (102 << 8)
- #define GP2_SET_TEXT_PRECISION (103 << 8)
- #define GP2_SET_TEXT_PATH (104 << 8)
- #define GP2_SET_FONT (105 << 8)
- #define GP2_SET_TEXT_EXPANSION (106 << 8)
- #define GP2_SET_TEXT_SPACING (107 << 8)
- #define GP2_SET_TEXT_MAP (108 << 8)
- #define GP2_LOAD_FONT (109 << 8)
- #define GP2_SET_TEXT_ATTRIBUTES (110 << 8)
- #define GP2_TEXT_INT_2D (111 << 8)
- #define GP2_TEXT_FLT_2D (112 << 8)
- #define GP2_TEXT_INT_3D (113 << 8)
- #define GP2_TEXT_FLT_3D (114 << 8)
- #define GP2_SET_TEXT_MAT_NUM (115 << 8)
- #define GP2_SET_CMAP_OFFSET (116 << 8)
- #define GP2_XF_TRISTRIP_FLT_3D_RGB (117 << 8)
-
- /* number of gp2 commands defined so far. */
- #define GP2_NCMDS 117
-
- /*
- * Commands that exist only on the GP3 (cgtwelve)
- * start here.
- *
- */
-
- #define GP3_SET_DB_PLANES_RGB (98 << 8)
- #define GP3_SET_FB_PLANES_RGB (100 << 8)
-
- #define GP3_PR_ROP24_FF (118 << 8)
- #define GP3_PR_ROP24_NF (119 << 8)
- #define GP3_PR_ROP24_TEX (120 << 8)
- #define GP3_PR_ROP24_BATCH (121 << 8)
- #define GP3_PR_VEC24 (122 << 8)
-
- #define GP3_TRISTAR_FLT_3D_RGB (125 << 8)
-
- /* number of gp3 commands defined so far. */
- #define GP3_NCMDS 122
-
-
- /* Constants for option field of commands */
- #define GP1_FREEBLKS 0x80 /* for EOCL */
-
- #define GP1_NOHIDDENSURF 0 /* for SET_HIDDENSURF */
- #define GP1_ZBHIDDENSURF 1 /* depth buffer polygons */
- #define GP1_ZBLINES 2 /* depth buffer lines */
- #define GP1_ZBMARKERS 4 /* depth buffer markers */
- #define GP1_ZBALL 7 /* depth buffer all primitives */
-
- #define GP1_SHADE_CONSTANT 0 /* for XF_POLYGON */
- #define GP1_SHADE_GOURAUD 1
- #define GP1_SHADE_TEX 2
-
- #define GP1_CLIP_PLANE_LEFT 0x20 /* for SET_CLIP_PLANES */
- #define GP1_CLIP_PLANE_RIGHT 0x10
- #define GP1_CLIP_PLANE_BOTTOM 0x8
- #define GP1_CLIP_PLANE_TOP 0x4
- #define GP1_CLIP_PLANE_HITHER 0x2
- #define GP1_CLIP_PLANE_YON 0x1
- #define GP1_CLIP_PLANES_2D 0x3C
- #define GP1_CLIP_PLANES_3D 0x3F
-
- #define GP1_PICK_OFF 0 /* for SET_PICK and CLEAR_PICK */
- #define GP1_PICK_DRAW 1
- #define GP1_PICK_NODRAW 2
-
- #define GP1_MARKER_LINE 0
- #define GP1_MARKER_POLY 1
- #define GP1_MARKER_CIRC 2
- #define GP1_MARKER_FILL_CIRC 3
-
- #define GP1_MARKER_PHIGS_DOT 4
- #define GP1_MARKER_PHIGS_1 4
- #define GP1_MARKER_PHIGS_PLUS 5
- #define GP1_MARKER_PHIGS_2 5
- #define GP1_MARKER_PHIGS_STAR 6
- #define GP1_MARKER_PHIGS_3 6
- #define GP1_MARKER_PHIGS_CIRCLE 7
- #define GP1_MARKER_PHIGS_4 7
- #define GP1_MARKER_PHIGS_CROSS 8
- #define GP1_MARKER_PHIGS_5 8
- #define GP1_MARKER_PHIGS_SQUARE 9
- #define GP1_MARKER_PHIGS_6 9
- #define GP1_MARKER_PHIGS_BOW_NE 10
- #define GP1_MARKER_PHIGS_7 10
- #define GP1_MARKER_PHIGS_BOW_NW 11
- #define GP1_MARKER_PHIGS_8 11
- #define GP1_MARKER_PHIGS(i) (GP1_MARKER_FILL_CIRC + i)
-
-
- #define GP1_DEPTH_CUE_OFF 0 /* for GP1_SET_DEPTH_CUE */
- #define GP1_DEPTH_CUE_ON 1
-
-
- #define GP2_SET_CMAP_DEFAULT 0
- #define GP2_SET_CMAP_ZERO 1
-
- #define GP2_INDEX_COLOR 0 /* For GP2_XF_PGON_XXX_3D_RGB */
- #define GP2_RGB_COLOR_TRIPLE 1 /* and GP1_SET_DEPTH_CUE_COLORS */
- #define GP2_RGB_COLOR_PACK 2
- #define GP2_VERTEX_NORMALS 4
- #define GP2_POLYGON_NORMAL 8
-
- /* For GP2_XF_TRISTRIP_FLT_3D_RGB */
- /* #define GP2_VERTEX_NORMALS 4 same as above */
- #define GP2_FACET_NORMALS 8
- #define GP2_STRIP_NORMAL 16
-
-
- /* Light source types or states */
-
- #define GP2_LIGHT_AMBIENT 0 /* 0x00 */
- #define GP2_LIGHT_DIRECTIONAL 1 /* 0x01 */
- #define GP2_LIGHT_POSITIONAL 2 /* 0x02 */
- #define GP2_LIGHT_SPOT 4 /* 0x04 */
-
- #define GP2_FRONT_PROPERTIES 0 /* 0x00 */
- #define GP2_BACK_PROPERTIES 1 /* 0x01 */
-
- #define GP2_NO_FACE_REJ 0 /* 0x00 */
- #define GP2_BACK_FACE_REJ 1 /* 0x01 */
- #define GP2_FRONT_FACE_REJ 2 /* 0x02 */
-
- #define GP2_FACE_REJECTION 0 /* 0x00 */
- #define GP2_BACK_FACE_SHADE 1 /* 0x01 */
- #define GP2_COPY_PNORM_TO_VNORM 2 /* 0x02 */
- #define GP2_GENERATE_PNORMAL 4 /* 0x04 */
- #define GP2_LIGHT_ON 8 /* 0x08 */
- #define GP2_LIGHT_OFF 16 /* 0x10 */
- #define GP2_IGNORE_FLAG 32 /* 0x20 */
-
- #define GP2_IGNORE_VERTEX_NORMAL 33 /* 0x21 */
- #define GP2_IGNORE_VERTEX_COLOR 34 /* 0x22 */
- #define GP2_IGNORE_VERTEX_DATA 35 /* 0x23 */
- #define GP2_IGNORE_LIGHTING 20 /* 0x14 */
- #define GP2_IGNORE_FRONT_FACE 0 /* 0x00 */
- #define GP2_IGNORE_BACK_FACE 1 /* 0x01 */
-
- #define GP2_EYE_DIRECTIONAL 0 /* 0x00 */
- #define GP2_EYE_POSITIONAL 1 /* 0x01 */
-
- /* For use in conjunction with GP2_SET_LIGHT_OPTIONS
- with the GP2_GENERATE_NORMAL option where you can have
- (ON or OFF) OR'd with (LEFTHAND or RIGHTHAND) to specify
- by which rule the application would like normals generated.
- This option is only available through the GP3. */
-
- #define GP3_USE_LEFTHAND_RULE 1 /* 0x01 */
- #define GP3_USE_RIGHTHAND_RULE 2 /* 0x02 */
-
- /* For use with all XF_PGON commands
- *
- * "or"ing this bit into a polygon command will cause quads to be split into
- * two triangles for increased performance. Note that this will cause concave
- * quads to be drawn incorrectly.
- */
- #define GP2_DIVIDE_QUADS 0x40
-
- /* Constants for text commands */
- #define GP2_TEXT_CLEAR_FONT 0
- #define GP2_TEXT_FONT0 0
- #define GP2_TEXT_FONT1 1
- #define GP2_TEXT_FONT2 2
- #define GP2_TEXT_FONT3 3
- #define GP2_TEXT_FONT4 4
- #define GP2_TEXT_FONT5 5
- #define GP2_TEXT_FONT6 6
- #define GP2_TEXT_FONT7 7
- #define GP2_TEXT_RIGHT 0
- #define GP2_TEXT_LEFT 1
- #define GP2_TEXT_UP 2
- #define GP2_TEXT_DOWN 3
- #define GP2_TEXT_STRING 0
- #define GP2_TEXT_CHAR 1
- #define GP2_TEXT_STROKE 2
- #define GP2_TEXT_VECTOR 0
- #define GP2_TEXT_FILLED 1
- #define GP2_TEXT_SPLINE 2
-
- /* Constants for size limits on commands */
-
- /* maximum # of 16 bit texture words for PR_PGON_TEX, PR_ROP_TEX* */
- #define GP1_MAXPRTEXSHORTS 2048
-
- /* limits for PR_LINE, PR_POLYLINE */
- #define GP1_MAX_BRUSH_WIDTH 181 /* sqrt(32767) */
- #define GP1_MAX_PAT_SEGS 16
-
- /* Constant to indicate version information is available
- in 3.2FCS and later releases of the pixrect library */
- #define GP1_VERSION_QUERY 1
-
-
- /* Old command names still available for compatibility */
-
- #define GP1_USEFRAME (1 << 8)
- #define GP1_PRVEC (2 << 8)
- #define GP1_PRROPNF (3 << 8)
- #define GP1_PRROPFF (4 << 8)
- #define GP1_PRPOLYSOL (5 << 8)
- #define GP1_SETZBUF (6 << 8)
- #define GP1_SETHIDDENSURF (7 << 8)
- #define GP1_SELECTMATRIX (8 << 8)
- #define GP1_XFORMPT_2D (9 << 8)
- #define GP1_XFORMPT_3D (10 << 8)
- #define GP1_XFPOLYGON_3D (11 << 8)
- #define GP1_XFPOLYGON_2D (12 << 8)
- #define GP1_CORENDCVEC_3D (13 << 8)
- #define GP1_CGIVEC (14 << 8)
- #define GP1_SETCLPLST (15 << 8)
- #define GP1_SETFBINDX (16 << 8)
- #define GP1_SETVWP_3D (17 << 8)
- #define GP1_SETVWP_2D (18 << 8)
- #define GP1_SETROP (19 << 8)
- #define GP1_SETCLIPPLANES (20 << 8)
- #define GP1_SETPIXPLANES (23 << 8)
- #define GP1_SET_MATRIX_3D (24 << 8)
- #define GP1_XFVEC_3D (25 << 8)
- #define GP1_XFVEC_2D (27 << 8)
- #define GP1_SETCOLOR (28 << 8)
- #define GP1_SET_MATRIX_2D (29 << 8)
- #define GP1_CORENDCPOLY_3D (30 << 8)
- #define GP1_MATMUL_2D (32 << 8)
- #define GP1_MATMUL_3D (33 << 8)
- #define GP1_GETMATRIX_2D (34 << 8)
- #define GP1_GETMATRIX_3D (35 << 8)
- #define GP1_COREWLDVECNDC_3D (36 << 8)
- #define GP1_COREWLDPOLYNDC_3D (37 << 8)
- #define GP1_SET_EF_TEX (39 << 8)
-
- /*
- * Macros for 32 bit accesses to GP shared memory.
- *
- * "p" is a pointer and "a" is a float or int argument.
- */
-
- #define GP1_PUT_S(p, a) (*p++ = a)
- #define GP1_GET_S(p, a) (a = *p++)
-
- #ifdef mc68000
-
- #define GP1_PUT_F(p, a) (* (float *) (p) = (a), \
- (p) += sizeof (float) / sizeof *(p))
- #define GP1_PUT_I(p, a) (* (int *) (p) = (a), \
- (p) += sizeof (int) / sizeof *(p))
- #define GP1_GET_F(p, a) ((a) = * (float *) (p), \
- (p) += sizeof (float) / sizeof *(p))
- #define GP1_GET_I(p, a) ((a) = * (int *) (p), \
- (p) += sizeof (int) / sizeof *(p))
-
- #else mc68000
-
- #define GP1_PUT_F(p, a) (((short *) (p))[0] = ((short *)&(a))[0], \
- ((short *) (p))[1] = ((short *) &(a))[1] , \
- (p) += sizeof (float) / sizeof *(p))
-
- #define GP1_PUT_I(p, a) (((short *) (p))[0] = ((short *)&(a))[0], \
- ((short *) (p))[1] = ((short *) &(a))[1], \
- (p) += sizeof (int) / sizeof *(p))
-
- #define GP1_GET_F(p, a) (((short *) &(a))[0] = ((short *)(p))[0], \
- ((short *) &(a))[1] = ((short *) (p))[1], \
- (p) += sizeof (float) / sizeof *(p))
-
- #define GP1_GET_I(p, a) (((short *) &(a))[0] = ((short *)(p))[0], \
- ((short *) &(a))[1] = ((short *) (p))[1], \
- (p) += sizeof (int) / sizeof *(p))
-
- #endif mc68000
-
-
- /* The names of these macros have been changed to avoid
- * conflict with the pixwin calls
- */
- #define gp1_pw_width(p) ((p)->pw_clipdata->pwcd_prmulti->pr_size.x)
- #define gp1_pw_height(p) ((p)->pw_clipdata->pwcd_prmulti->pr_size.y)
- #define gp1_pw_offset_X(p) (gp1_d((p)->pw_clipdata->pwcd_prmulti)->cgpr_offset.x)
- #define gp1_pw_offset_Y(p) (gp1_d((p)->pw_clipdata->pwcd_prmulti)->cgpr_offset.y)
-
- #endif gp1cmds_DEFINED
-